# 文件上传
import cv2
import flask, os, sys,time
from flask import request

interface_path = os.path.dirname(__file__)
sys.path.insert(0, interface_path)  #将当前文件的父目录加入临时系统变量

server = flask.Flask(__name__, static_folder='static')

@server.route('/', methods=['get'])
def index():
    return '<form action="/upload" method="post" enctype="multipart/form-data"><input type="file" id="img" name="img"><button type="submit">上传</button></form>'

@server.route('/upload', methods=['post'])
def upload():
    fname = request.files['img']  #获取上传的文件
    if fname:
        t = time.strftime('%Y%m%d%H%M%S')
        new_fname = r'static/' + t + fname.filename
        fname.save(new_fname)  #保存文件到指定路径

        img = cv2.imread(new_fname, 1)

        # 导入人脸级联分类器引擎，'.xml'文件里包含训练出来的人脸特征
        face_engine = cv2.CascadeClassifier('shiyan\haarcascade_frontalface_default.xml')
        # 用人脸级联分类器引擎进行人脸识别，返回的faces为人脸坐标列表，1.3是放大比例，5是重复识别次数
        faces = face_engine.detectMultiScale(img, scaleFactor=1.3, minNeighbors=5)

        # 对每一张脸，进行如下操作
        for (x, y, w, h) in faces:
            # 画出人脸框，蓝色（BGR色彩体系），画笔宽度为2
            img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

        # 在"img2"窗口中展示效果图
    #    cv2.imshow('img2', img)
        # 监听键盘上任何按键，如有按键即退出并关闭窗口，并将图片保存为output.jpg
    #    cv2.waitKey(0)
    #    cv2.destroyAllWindows()
        cv2.imwrite('static/output.png', img)
        picture='static/output.png'
        return '<img src=%s>' % picture
    else:
        return '{"msg": "请上传文件！"}'
print('----------路由和视图函数的对应关系----------')
print(server.url_map) #打印路由和视图函数的对应关系
server.run(port=8000)